package org.colswe.testingProject.control;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.Persistence;
import org.colswe.testingProject.dao.SystemUserDao;
import org.colswe.testingProject.entity.SystemUser;

/**
 * Clase SystemUserControl para el control de SystemUser.
 *
 * @author andres
 */
public class SystemUserControl {

    /**
     * Dao para el manejo de SystemUser.
     */
    private SystemUserDao dao;

    /**
     * Constructor del control SystemUserControl.
     */
    public SystemUserControl() {
        dao = new SystemUserDao(Persistence.createEntityManagerFactory("TPPU"));
    }

    /**
     * Crear un SystemUser.
     *
     * @param toCreate SystemUser a crear.
     * @return Verdadero si se creó correctamente, falso de en forma contraria.
     */
    public boolean create(SystemUser toCreate) {
        return dao.create(toCreate);
    }

    /**
     * Buscar un SystemUser.
     *
     * @param toRead SystemUser a buscar
     * @return SystemUser encontrado
     */
    public SystemUser read(SystemUser toRead) {
        return dao.read(toRead);
    }

    /**
     * Actualizar un SystemUser.
     *
     * @param toUpdate SystemUser a actualizar.
     * @return Verdadero si se actualizó correctamente.
     */
    public boolean update(SystemUser toUpdate) {
        return dao.update(toUpdate);
    }

    /**
     * Borrar un SystemUser.
     *
     * @param toDelete SystemUser a borrar.
     * @return Verdadero si se borró correctamente.
     */
    public boolean delete(SystemUser toDelete) {
        return dao.delete(toDelete);
    }

    /**
     * Buscar todos los SystemUser.
     *
     * @return Lista de SystemUsers
     */
    public Collection<SystemUser> readAll() {
        return dao.readAll();
    }

    /**
     * Este método calcula la suma SHA-256 de una cadena para propositos de seguridad.
     *
     * @param s La cadena que va a ser cifrada
     * @return la suma SHA-256
     */
    public static String sha256(String s) {
        try {
            MessageDigest messageDigest =
                    MessageDigest.getInstance("SHA-256");
            byte[] bs;
            messageDigest.reset();
            bs = messageDigest.digest(s.getBytes());
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < bs.length; i++) {
                String hexVal = Integer.toHexString(0xFF & bs[i]);
                if (hexVal.length() == 1) {
                    stringBuilder.append("0");
                }
                stringBuilder.append(hexVal);
            }

            return stringBuilder.toString();
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(SystemUserControl.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }

    }
}
